package com.leyou.item.service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.leyou.common.pojo.PageResult;
import com.leyou.item.mapper.BrandMapper;
import com.leyou.item.pojo.Brand;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;

import java.util.List;


@Service
public class BrandService {
    @Autowired
    private BrandMapper brandMapper;
    /**
     * 根据查询条件分页并排序查询品牌信息
     * @param key 搜索关键词
     * @param page 页码
     * @param rows 分页条数
     * @param sortBy 排序字段
     * @param desc 是否升序
     * @return
     */
    public PageResult<Brand> queryBrandsByPage(String key, Integer page, Integer rows, String sortBy, Boolean desc) {
        //初始化Example对象
        Example example = new Example(Brand.class);
        //添加搜索条件
        if(StringUtils.isNotBlank(key)){
            example.createCriteria().andLike("name","%"+key+"%").orEqualTo("letter",key);
        }
        //添加排序条件
        if(StringUtils.isNotBlank(sortBy)){
            example.setOrderByClause(sortBy+" "+(desc?"desc":"asc"));
        }
        //添加分页条件
        PageHelper.startPage(page,rows);
        //进行查询
        List<Brand> brands = brandMapper.selectByExample(example);
        //创建pageInfo对象
        PageInfo pageInfo = new PageInfo(brands);
        //创建返回结果对象
        PageResult<Brand> result = new PageResult<>();
        result.setTotal(pageInfo.getTotal());
        result.setItems(pageInfo.getList());
        return result;
    }

    /**
     * 新增品牌
     * @param brand
     * @param cids
     */
    @Transactional //添加事务，有一个保存失败就会回滚事务
    public void saveBrand(Brand brand, List<Long> cids) {
        //首先判断brand是否存在id
        if(brand.getId()==null){
            //如果不存在则是新增
            //新增品牌
            brandMapper.insertSelective(brand);

        }else{
            //如果存在则是修改
            brandMapper.updateByPrimaryKeySelective(brand);
            //修改中间表
            //先通过品牌id删除掉中间表的信息
            brandMapper.deleteCategoryAndBrand(brand.getId());

        }
        //在新增中间表
        //循环cids
        for(Long cid:cids){
            brandMapper.saveCategoryAndBrand(cid,brand.getId());
        }

    }
    /**
     * 根据品牌id删除品牌以及对应的中间表数据
     * @param id
     * @return
     */
    public void delBrand(Long id) {
        //删除品牌
        brandMapper.deleteByPrimaryKey(id);
        //删除中间表数据
        brandMapper.deleteCategoryAndBrand(id);
    }
    /**
     * 根据分类id查询品牌列表
     * @param cid
     * @return
     */
    public List<Brand> queryBrandsByCid(Long cid) {
        return brandMapper.selectBrandsByCid(cid);
    }
    /**
     * 根据品牌id查询品牌
     * @param id
     * @return
     */
    public Brand queryBrandById(Long id) {
        return brandMapper.selectByPrimaryKey(id);
    }
}
